/**
 * 
 * Cette classe g�re les affectations d'une constante ou variable � une variable.
 * 
 * @author Guillaume PANNETIER
 * @author Bertrand LE MAROUILLE
 * @author Quentin DORVEAUX
 * @author Corentin GUICHAOUA
 */
public class Affectation {

	/**
	 * IdVar actuellement manipul� pour �tre affect�.
	 */
	private IdVar id;
	private String nomId;

	
	/**
	 * Constructeur vide de la classe.
	 */
	public Affectation(){
	}

	
	/**
	 * Cette m�thode re�oit un nom d'Ident en param�tre et fait pointer l'attribut Id dessus.
	 * Si le nom pass� en param�tre ne correspond pas � un IdVar, alors une message d'erreur est affich� dans la console.
	 * @param nomIdent Nom de la variable qui va maintenant �tre point� par l'attribut Id
	 */
	public void setIdent(String nomIdent){

		try {
			nomId = nomIdent;
			Ident i=Yaka.tabIdent.chercheIdent(nomIdent);
			if(i.getClass().toString().equals("class IdVar")){
				id = (IdVar)i;
			}else{
				Erreur.erreur("Identificateur de variable attendu : "+nomIdent);
				id=new IdVar(-42,Yaka.T_ERREUR);
			}
		} catch (TabIdentException e) {
			Erreur.erreur(e.getMessage());
			id=new IdVar(-42,Yaka.T_ERREUR);
		}
	}

	/**
	 * Cette m�thode affecte la variable point�e par Id avec la valeur contenue dans le haut de la pile de Yaka.expression.
	 */
	public void affecte(){
		int i=Yaka.expression.depileType();
		if(id.getType()==i){
			Yaka.yvm.istore(id.getOffset());
		}else if(i==Yaka.T_ERREUR||id.getType()==Yaka.T_ERREUR)
		{}
		else{
			Erreur.erreur("Erreur affectation "+nomId+" : attendu "
					+Yaka.imageType[id.getType()]+", trouve "+Yaka.imageType[i]);
		}
	}

}
